/*
*
==============================================================================
*  Name        : 
*  Part of     : Omen Game Engine
*  Description : 
*  Version     : 1.0
*
*  Copyright (c) 2013 Lauri Kortevaara.
* 
==============================================================================
*/


#pragma once

#include "IOmenFactory.h"

namespace Omen
{
    class OmenFactory : public IOmenFactory 
    {
        OmenFactory(); // Define as hidden 
    public:
        static IOmenFactory& getFactory();

        virtual IKernel&   getKernel();

        virtual std::unique_ptr<IScene>  newSceneObject(); // Factory function for creating a new scene object
        virtual IModel*     newModelObject(); // Factory function for creating a new model object
        virtual IMesh*      newMeshObject();  // Factory function for creating a new mesh object
        virtual ICamera*    newCamera();        // Facotry function for creating a new camera
        virtual IMaterial*  newMaterialObject(); // Factory function for creating a new material object
        virtual std::unique_ptr<ITexture> newTextureObject(); // Factory function for creating a new texture object
        virtual std::unique_ptr<IRigidBody> newRigidBody(); // Factory function for creating a new rigid body object

        virtual ITimer*     newTimer();       // Factory function for createing a new timer
        virtual IFileUtils& fileUtils();// Factory function for createing a new File Utils object

        
    };
}
